<?php
  trait Str_all{
    public function str_all($str){

      //字符串分行,三参默认为\n,即网页源码换行,四参为true时对最后超出长度的字符也换行
      $str = "An example of a long word is: Supercalifragulistic";
      echo wordwrap($str,15,'<br/>');
      echo '<br/>'.wordwrap($str,15,'<br/>',true);
      return;

      //字符串截取替换,三参开始位置,子串长度不够,按子串长度截取
      echo substr_replace("ZXYa",$str.'A',0,4);
      return;

      //截取计算出现次数,二参区分大小写,三、四参截取字符串,超出长度会产生警告
      echo substr_count("zxyZXYzxy",$str,3,6);
      return;

      //截取+比较,大小写敏感,五参true不区分大小写,三参为起始截取位置,四参为※※※截取长度※※※
      echo substr_compare('zayZXYsdf',$str,3,3,true);
      return;

      //※※※※返回字符串一部分,字符串切割※※※※,二参为起始截取位置,三参为※※※截取长度※※※
      echo substr('aaBVBACcasdaFAS',1);
      echo '<br/>',substr('aaBVBACcasdaFAS',-1);
      echo '<br/>',substr('aaBVBACcasdaFAS',5,8);
      return;

      //自定义字符串替换,如果替换和被替换长度不一样,则格式化(min[替换,被替换])成小的长度
      echo strtr($str,'xy','X');
      return;

      //字符串分割,循环使用,每一次分割新的字符串,要重新定义一参,正常二参当做一参用即可
      echo $result = strtok('zxy,sh,mjc',',').'<br/>';
      while ($result!='<br/>') {
        echo $result = strtok(',').'<br/>';
      }
      return;

      //字符串翻转
      echo strrev($str);
      return;

      //经典字符串搜索,大小写敏感,剩余部分一起返回
      echo strpbrk('I love Beijing!','ji');
      return;

      /**
       * 使用"自然"算法来比较两个字符串（不区分大小写）
       * 在自然算法中，数字 2 小于数字 10。在计算机排序中，10 小于 2，这是因为 10 中的第一个数字小于 2。
       * 个人理解就是读取整形(读取完整数据)再做比较
       */
      echo strnatcasecmp("2","10");
      return;

      //返回字符串长度
      echo strlen($str);
      return;

      //同下,区分大小写
      echo strrpos('zxyzxyzxy','X');  //输出NULL
      return;

      //查找二参在一参中最后一次出现的位置(二参为n+1),不区分大小写
      echo strripos('zxyzxyzxy','X');
      return;

      //同下,区分大小写
      echo strpos($str,'Y');  //输出NULL
      return;

      //查找二参在一参中第一次出现的位置(二参为n+1),不区分大小写,及上4个函数三参详见w3c
      echo stripos($str,'Y');
      return;

      //删除addslashes()添加进字符串的反斜杠,与stripcslashes区别详见addslashes与addcslashes的区别
      echo $result = addslashes("zxy's");
      echo '<br/>'.stripslashes($result);
      return;

      //删除addcslashes添加进字符串的反斜杠
      echo $result = addcslashes($str,'x');
      echo '<br/>'.stripcslashes($result);
      return;

      //剥去字符串中html标签,二参为忽略标签(不剥去)
      echo strip_tags('a<b>b</b>','<b>');
      return;

      //返回一参字符串中二参之前的字符数,二、三参详见w3c
      echo strcspn($str,'x');
      return;

      //返回n n为一参字符串直到第n位均全部存在于二参中,三、四参详见w3c
      echo strspn('zxyasdgf',$str);
      return;

      //比较两个字符串,字符串的比较会根据本地设置而变化（A<a 或 A>a）。
      setlocale (LC_COLLATE, 'C');
      echo strcoll("H","h");
      setlocale (LC_COLLATE, 'zh');
      echo '<br/>'.strcoll("H","h");
      return;

      //同strcmp,大小写敏感,二参指定字符串比较位数
      echo strncmp("zxR",$str,2);
      return;

      //比较两字符,※※区分大小写※※,返回值与strcasecmp()一样,详见strcasecmp
      echo strcmp("zxy",$str);
      return;

      //与下函数一样,只是不区分大小写
      echo stristr("hello zxy is a good boy",'ZXY');
      return;

      //同下函数,搜索字符串在另一字符串中的最后一次出现。(位置),返回找到及之后的字符串,
      echo strrchr('zxyzxyzxy','x');
      return;

      /**
       * 搜索字符串在另一字符串中的第一次出现。(位置),返回找到及之后的字符串,
       * ※※※该函数对大小写敏感※※※
       * 同名函数strstr();
       * 二参支持ASCLL
       * 三参 默认false、返回查找字符串之前的字符
       */
      echo strchr("hello zxy is a good boy",$str);
      echo '<br/>'.strstr("hello zxy is a good boy",$str);
      echo '<br/>'.strstr("hello zxy is a good boy",111); //ASCLL o
      echo '<br/>'.strstr("hello zxy is a good boy",111,true); //ASCLL o
      return;

      //比较两个字符串,可控制比较部分长度,也不区分大小写
      echo strncasecmp($str,'zxR',2);
      return;

      //比较两字符串(=<>)
      echo strcasecmp($str,'ZxY');
      echo '<br/>'.strcasecmp($str,'zxyAA');
      return;

      /**
       * 统计字符串中的单词数
       * 二参
       * 0 - 默认。返回找到的单词的数目。
       * 1 - 返回包含字符串中的单词的数组。
       * 2 - 返回一个数组，其中的键名是单词在字符串中的位置，键值是实际的单词。
       * 三参,将三参(特殊字符)视为一个单词
       */
      $arr = str_word_count("This Is * Word",2,"*");
      $this->pri($arr);
      return;

      //分割字符串到数组中,二参为每个元素长度,默认1
      $arr = str_split($str);
      $this->pri($arr);
      $arr = str_split($str,2);
      $this->pri($arr);
      return;

      //随机打乱字符串中所有字符
      echo str_shuffle($str);
      return;

      //对字符串执行 ROT13 编码,※※亦可解码※※,原理简单见w3c
      echo $result = str_rot13($str);
      echo '<br/>'.str_rot13($result);
      return;

      //重复输出指定字符串
      echo str_repeat($str,3);
      return;

      /**
       * 字符串右侧填充,用三参填充
       * 四参
       * STR_PAD_BOTH - 填充字符串的两侧。如果不是偶数，则右侧获得额外的填充。
       * STR_PAD_LEFT - 填充字符串的左侧。
       * STR_PAD_RIGHT - 填充字符串的右侧。默认。
       */
      echo str_pad($str,10,'*',STR_PAD_BOTH);
      return;

      //区分大小写
      $arr = str_ireplace(array("hello","world"),array("zxy"),array("Hello","world","!"));
      $this->pri($arr);
      return;

      //替换字符串中的一些字符（不区分大小写）,参数$find,$replace,$arr,明细见w3c
      $arr = str_ireplace(array("HELLO","WORLD"),array("ZXY"),array("Hello","world","!"));
      $this->pri($arr);
      return;

      //解析CSV字符串,能解析比explode更复杂的字符串,GG※※※BUG※※※
			$csv = "中国,广东省,广州市,天河区,'113.329884,23.154799',1,'2016-01-01 12:00:00','1,2,3,4,5,6'";
			$arr = explode(',',$csv);
			$this->pri($arr);
			$arr = str_getcsv($csv,',',"'");
			$this->pri($arr);
			return;
    }
  }
 ?>
